<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>

// [js] 什么是闭包？优缺点分别是什么？
闭包的定义：从外部访问或者操作函数内部变量的的方式，缓存数据,延长作用域链（JS是函数作用域）

例子：定义了一个内部变量，但是不想使这些变量不能被外部随意修改，同时又可以通过指定的函数接口来操作来访问，闭包的作用常常用来「间接访问一个变量」。换句话说，「隐藏一个变量」

缺点：函数中的变量不能及时的释放

function Foo(){
 var name = "fooname";  //需要从外部访问这些变量
 var age = 12;
  
 this.getFoo = function(){  //设置访问方法
  return name;
 }
  
 this.setFoo = function(){
  return age;
 }
 this.xgFoo = function(new){
  name = new;
 }
}

var foo = new Foo();
foo.getFoo();  //访问name变量。
foo.xgFoo("liz") //从外部修改nage变量
  </script>
</body>
</html>